package com.sg.dto.biz.finance.req;

import com.sg.dto.biz.finance.common.SubCycleDto;
import com.sg.dto.biz.finance.common.SuperiorEvaObjTargetCycleDto;
import com.sg.common.dto.BaseDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

/**
 * @desc ImplementSingleContentCountTargetFundingSourceBudgetSetRedisComReqDto
 * @使用场景
 */
@Data
public class ImplementSingleContentCountTargetFundingSourceBudgetSetRedisComReqDto
        extends BaseDto
        implements Serializable {

    /**
     * 评价模板ID
     */
    @NotNull(message = "评价模板ID不能为空")
    @ApiModelProperty("评价模板ID")
    private String evaluationTemplateId;

    /**
     * 周期模式类型编码 FATHER_SON_CYCLE:父子周期 SINGLE_CYCLE:单周期 IRREGULAR_CYCLE:不规则周期
     */
    @NotNull(message = "周期模式类型编码不能为空")
    @ApiModelProperty("周期模式类型编码")
    private String periodicModeTypeCode;

    /**
     * 是否执行财务处理 TRUE:是 FALSE:否
     */
    @NotNull(message = "是否执行财务处理不能为空")
    @ApiModelProperty("是否执行财务处理")
    private String isExecuteFinaceHandle;

    /**
     * 增财务账户类型编码 NO_ADD:不增 ADD_BUDGET_ACCOUNT:增预算账户 ADD_PHYSICAL_ACCOUNT:增实体账户 ADD_BOTH:增预算账户与实体账户
     */
    @NotNull(message = "增财务账户类型编码不能为空")
    @ApiModelProperty("增财务账户类型编码")
    private String addFinAccountTypeCode;

    /**
     * 是否统计账户 TRUE:是 FALSE:否
     */
    @NotNull(message = "是否统计账户不能为空")
    @ApiModelProperty("是否统计账户")
    private String isStatisticalAccount;

    /**
     * 是否末级统计账户 TRUE:是 FALSE:否
     */
    @NotNull(message = "是否末级统计账户不能为空")
    @ApiModelProperty("是否末级统计账户")
    private String isLastStaticAccount;

    /**
     * 数据对象批次标识
     */
    @NotNull(message = "数据对象批次标识不能为空")
    @ApiModelProperty("数据对象批次标识")
    private String dataObjectBatchCode;

    /**
     * 关联目标内容ID
     */
    @NotNull(message = "关联目标内容ID不能为空")
    @ApiModelProperty("关联目标内容ID")
    private String targetCycleContentId;

    /**
     * 关联目标内容类型编码 TARGET:目标 TARGET_CATEGORY:目标分类 OBJECTIVE:指标
     */
    @NotNull(message = "关联目标内容类型编码不能为空")
    @ApiModelProperty("关联目标内容类型编码")
    private String targetCycleContentTypeCode;

    /**
     * 父周期被评对象目标周期ID
     */
    @NotNull(message = "父周期被评对象目标周期ID不能为空")
    @ApiModelProperty("父周期被评对象目标周期ID")
    private String fatherEvaObjTargetCycleId;

    @ApiModelProperty("父周期列表 ")
    List<String> parentCycleList = new ArrayList<>();

    @ApiModelProperty("上级目标内容被评对象目标周期列表")
    private List<SuperiorEvaObjTargetCycleDto> superiorEvaObjTargetCycleList = new ArrayList<>();

    @ApiModelProperty("子周期列表")
    private List<SubCycleDto> subCycleList = new ArrayList<>();

    @ApiModelProperty("中期列表 ")
    List<String> midTermList = new ArrayList<>();

    /**
     * 中期被评对象目标周期ID
     */
    @ApiModelProperty("中期被评对象目标周期ID")
    private String midEvaObjTargetCycleId;

}
